CI/CD

1. 소프트웨어 개발 패러다임의 전환과 CI/CD의 필연성

현대 비즈니스 환경에서 소프트웨어는 더 이상 단순한 지원 도구가 아니라, 기업의 핵심 경쟁력이자 가치 창출의 주된 동력으로 자리 잡았다. 이러한 변화 속에서 기업은 시장의 요구에 신속하게 대응하고, 새로운 아이디어를 빠르게 제품으로 구현하여 고객에게 전달해야 하는 압박에 직면해 있다. 시장 출시 시간(Time-to-Market)의 단축은 생존과 성장을 위한 필수 과제가 되었다.1 이러한 시대적 요구에 부응하기 위해 소프트웨어 개발 방법론은 끊임없이 진화해왔으며, 그 중심에 애자일(Agile)과 데브옵스(DevOps) 운동이 있다.3

전통적인 폭포수(Waterfall) 모델은 요구사항 분석, 설계, 구현, 테스트, 배포의 각 단계를 순차적으로 진행하는 방식이었다. 이 모델은 계획의 명확성이라는 장점이 있었지만, 한 단계가 완전히 끝나야 다음 단계로 넘어갈 수 있어 전체 개발 주기가 길고, 변화에 유연하게 대처하기 어려웠다. 특히, 개발 후반부에 모든 구성 요소를 통합하고 테스트하는 과정에서 예측 불가능한 수많은 오류가 발생하는 ’통합 지옥(Integration Hell)’은 프로젝트 지연의 주된 원인으로 지목되었다.4 개발팀은 잦은 업데이트를 통해 제품에 변화를 만들어야 하는 반면, 운영팀은 서비스 안정성을 위해 변경을 최소화하려는 상충된 목표는 조직 내 갈등을 유발하고 릴리스 주기를 더욱 길게 만들었다.3

애자일과 데브옵스는 이러한 전통적 방식의 한계를 극복하기 위한 대안으로 등장했다. 애자일은 짧은 주기의 반복(iteration)을 통해 점진적으로 소프트웨어를 개발하고, 변화하는 요구사항을 수용하는 데 초점을 맞춘다.6 데브옵스는 개발(Development)과 운영(Operations)의 사일로(silo)를 허물고, 소통, 협업, 통합을 통해 소프트웨어 전달 프로세스 전체를 효율화하려는 문화적, 철학적 접근법이다.3

바로 이 지점에서 지속적 통합/지속적 제공(Continuous Integration/Continuous Delivery, CI/CD)은 애자일과 데브옵스 철학을 현실 세계에서 구현하는 핵심적인 기술적 실천 방법론으로 등장한다.8 CI/CD는 단순히 반복적인 작업을 자동화하는 도구의 집합이 아니다. 이는 ’통합 지옥’과 같은 전통적 개발 방식의 고질적인 문제를 해결하고, 소프트웨어를 빠르고, 안정적이며, 예측 가능하게 사용자에게 전달하기 위한 체계적인 접근법이다.1 CI/CD는 개발부터 배포에 이르는 전 과정을 자동화된 파이프라인으로 연결함으로써, 아이디어가 코드로 변환되어 사용자에게 가치를 제공하기까지의 시간을 극단적으로 단축시킨다.

이러한 패러다임의 전환은 소프트웨어의 가치가 ’완성된 제품’의 형태로 한 번에 전달되는 것이 아니라, ’지속적으로 개선되는 서비스’로서 점진적으로 전달된다는 인식의 변화를 반영한다. 과거 폭포수 모델이 소프트웨어를 하나의 완성품으로 보았다면, 애자일은 이를 끊임없이 발전하는 유기체로 간주했다.6 CI/CD는 바로 이 ’점진적 발전’을 가능하게 하는 기술적 동맥과 같은 역할을 수행한다. CI/CD의 도입은 단순히 개발 효율성을 높이는 차원을 넘어, 비즈니스가 시장 변화에 민첩하게 대응하고 고객 피드백을 실시간으로 제품에 반영하는 능력, 즉 비즈니스 민첩성(Business Agility) 자체를 결정하는 핵심 경쟁력으로 작용한다. 이는 더 이상 기술 부서만의 혁신이 아닌, 비즈니스 전략의 혁신과 직결되는 문제이다.

본 안내서는 CI/CD를 둘러싼 기술적, 전략적 측면을 심층적으로 고찰하는 것을 목표로 한다. 제 1부에서는 CI/CD의 근간을 이루는 지속적 통합, 지속적 제공, 지속적 배포의 기본 원리와 철학을 명확히 정의하고, 데브옵스와의 공생 관계를 분석한다. 제 2부에서는 CI/CD 파이프라인의 구체적인 구조와 이를 구성하는 핵심 기술 스택 및 도구 체인을 해부한다. 제 3부에서는 브랜칭 및 배포 전략, 파이프라인 보안(DevSecOps), 그리고 성공적인 구현을 위한 모범 사례 등 고도화된 전략을 다룬다. 마지막으로 제 4부에서는 GitOps, AIOps, 서버리스, 플랫폼 엔지니어링 등 CI/CD의 최신 동향과 미래 전망을 탐구함으로써, 지속 가능한 혁신을 위한 동력으로서 CI/CD의 역할을 조망하고자 한다.

2. CI/CD의 기본 원리와 철학

2.1 지속적 통합 (Continuous Integration, CI)

지속적 통합(Continuous Integration, CI)은 현대 소프트웨어 개발의 근간을 이루는 핵심 프랙티스이다. 이는 여러 명의 개발자가 각자 작업한 코드 변경 사항을 하루에 여러 번, 가능한 한 자주 공유 코드베이스의 중앙 브랜치(일반적으로 main 또는 trunk라 불림)에 병합하는 개발 문화를 의미한다.4 CI의 핵심은 단순히 코드를 자주 합치는 행위에 있는 것이 아니라, 각각의 통합이 자동화된 프로세스에 의해 즉시 검증된다는 점에 있다.

CI 프로세스의 핵심 활동은 다음과 같이 구성된다. 개발자가 자신의 코드 변경 사항을 버전 관리 시스템(Version Control System, VCS)에 커밋(commit)하고 푸시(push)하면, 이 이벤트는 웹훅(webhook)과 같은 메커니즘을 통해 CI 서버(예: Jenkins, GitLab CI)에 자동으로 통지된다.6 CI 서버는 즉시 자동화된 빌드(build) 프로세스를 트리거한다. 이 과정에서 소스 코드는 컴파일되고, 필요한 의존성 라이브러리들이 설치되며, 실행 가능한 소프트웨어 아티팩트(artifact)가 생성된다.11 빌드가 성공적으로 완료되면, 파이프라인은 다음 단계로 넘어가 사전에 정의된 자동화된 테스트 스위트를 실행한다. 여기에는 코드의 개별 단위(함수, 클래스)가 의도대로 작동하는지 검증하는 단위 테스트(unit test)와, 여러 구성 요소가 결합되었을 때 상호작용을 확인하는 통합 테스트(integration test)가 포함된다.1

이 모든 빌드 및 테스트 과정에서 실패가 발생할 경우, CI 시스템은 즉시 해당 변경 사항을 커밋한 개발자를 포함한 개발팀 전체에 실패 사실과 관련 로그를 통지한다.2 이 즉각적인 피드백은 CI의 가장 중요한 가치 중 하나로, 개발자는 자신이 방금 작성한 코드의 문제가 무엇인지 가장 잘 알고 있는 상태에서 신속하게 디버깅하고 수정할 수 있다.

CI가 추구하는 근본적인 목표는 다음과 같다.

  • 통합 문제 조기 발견 및 해결: 전통적인 개발 방식에서는 프로젝트 막바지에 이르러서야 각 개발자의 코드를 한꺼번에 통합하려 시도했고, 이 과정에서 수많은 충돌과 예측 불가능한 버그가 발생하며 ’통합 지옥’을 경험했다.4 CI는 통합을 작고, 빈번한 단위로 분산시킴으로써 통합으로 인한 문제를 개발 주기 초기에, 그리고 격리된 상태에서 발견하고 해결할 수 있게 하여 통합 비용을 극적으로 감소시킨다.6
  • 코드 품질 유지 및 향상: 모든 커밋은 자동화된 빌드와 테스트라는 품질 게이트(quality gate)를 통과해야만 메인 브랜치에 안정적으로 통합될 수 있다. 이는 최소한의 품질 기준을 지속적으로 유지하며, 버그가 포함된 코드가 프로덕션 환경으로 유입될 가능성을 사전에 차단하는 역할을 한다.1
  • 개발자 생산성 향상: 개발자는 더 이상 통합과 디버깅에 소요되는 지루하고 반복적인 작업에 시간을 낭비하지 않고, 새로운 기능을 개발하고 비즈니스 가치를 창출하는 핵심적인 업무에 집중할 수 있다.1
  • 신속한 피드백 루프 구축: 코드 변경 후 수 분 내에 그 결과(성공 또는 실패)를 알 수 있게 함으로써, 개발 프로세스의 불확실성을 제거하고 개발 속도를 높인다.2

CI의 진정한 가치는 단순히 빌드와 테스트를 ’자동화’하는 기술적 행위를 넘어선다. 자동화는 팀의 개발 습관과 문화를 긍정적인 방향으로 변화시키는 강력한 촉매제 역할을 한다. CI 환경에서 개발자는 자신의 코드가 전체 시스템에 미칠 영향을 항상 고려해야만 한다. 빌드가 깨지는 것은 더 이상 개인의 실수가 아니라 팀 전체의 진행을 막는 이벤트가 되기 때문이다.2 이러한 환경은 자연스럽게 개발자들이 거대한 기능 덩어리를 한 번에 커밋하는 대신, 기능을 잘게 쪼개어 작고 관리 가능한 단위로 자주 커밋하는 습관을 형성하도록 유도한다.9 이러한 ’작고 잦은 통합’은 각 변경 사항이 가지는 리스크를 줄여주며, 문제가 발생했을 때 원인이 되는 특정 커밋을 찾아내기 쉽게 만들어준다.4

궁극적으로 CI는 팀에게 ’코드 병합’에 대한 두려움을 없애주고, 언제든지 안심하고 코드를 리팩토링하거나 새로운 기술을 시도할 수 있는 심리적 안정감을 제공한다. 이 기술적 안전망은 팀이 코드베이스를 지속적으로 건강하게 유지하고, 끊임없이 개선을 추구하는 선순환 구조를 만들어낸다.10 이처럼 CI는 기술을 통해 조직의 개발 문화를 혁신하는 근본적인 동력이라 할 수 있다.

2.2 지속적 제공과 지속적 배포 (Continuous Delivery & Deployment, CD)

지속적 통합(CI)이 개발팀 내부의 코드 통합 문제를 해결하는 데 중점을 둔다면, 지속적 제공(Continuous Delivery)과 지속적 배포(Continuous Deployment)는 그 결과물을 사용자에게 전달하는 과정을 다룬다. 이 두 용어는 종종 혼용되지만, 자동화의 범위와 최종 배포 결정 주체에서 명확한 차이를 가지며, 이를 이해하는 것은 조직의 비즈니스 목표와 리스크 관리 전략에 맞는 CI/CD 파이프라인을 설계하는 데 매우 중요하다.4

지속적 제공 (Continuous Delivery)

지속적 제공은 CI 단계를 성공적으로 통과한 코드 변경 사항이 빌드, 각종 테스트(단위, 통합, 성능, 보안 등), 그리고 스테이징(Staging) 환경으로의 배포까지 모든 과정을 자동화하는 것을 목표로 한다.4 핵심은 소프트웨어가 ’언제든지 프로덕션 환경에 배포될 수 있는 상태(always in a deployable state)’로 유지되는 것이다.15

지속적 제공 파이프라인에서, CI를 거친 빌드 아티팩트는 자동으로 테스트 환경으로 배포되어 더욱 심층적인 테스트(예: End-to-End 테스트, 사용자 인수 테스트)를 거친다. 이 단계까지 통과하면, 해당 아티팩트는 프로덕션 환경과 거의 동일하게 구성된 스테이징 환경에 배포되어 최종 검증을 받는다. 이 모든 과정은 사람의 개입 없이 자동으로 진행된다.

그러나 지속적 제공의 마지막 단계, 즉 스테이징 환경에서 검증된 버전을 실제 프로덕션 환경으로 배포하는 것은 ’수동’으로 이루어진다.16 이 수동 개입은 보통 버튼 클릭과 같이 단순한 형태로 구현되지만, 이 결정은 기술팀이 아닌 비즈니스 담당자(제품 관리자, 마케팅팀 등)가 내린다. 즉, 기술적으로는 언제든 배포가 가능하지만, 실제 배포 시점은 비즈니스 전략, 마케팅 캠페인 일정, 고객 공지 등 비기술적 요인에 의해 결정된다. 이는 개발팀과 비즈니스팀 간의 가시성과 소통을 증진시키고, 최소한의 노력으로 신뢰성 있고 예측 가능한 릴리스 프로세스를 확립하는 데 큰 도움을 준다.4

지속적 배포 (Continuous Deployment)

지속적 배포는 지속적 제공에서 한 걸음 더 나아간, 가장 높은 수준의 자동화를 의미한다.4 이 모델에서는 CI부터 스테이징 환경에서의 모든 자동화 테스트를 통과한 코드 변경 사항이 어떠한 인간의 개입도 없이 ‘자동으로’ 프로덕션 환경까지 배포된다.17

개발자가 메인 브랜치에 코드를 병합하고 모든 자동화된 품질 게이트를 통과하면, 수 분 내에 해당 기능이 실제 사용자들에게 전달된다. 이는 운영팀이 수동 배포 작업으로 인해 겪는 과부하 문제를 근본적으로 해결하고, 아이디어가 사용자에게 가치를 제공하기까지의 리드 타임을 극단적으로 단축시킨다.4 지속적 배포 환경에서는 더 이상 ’출시일(release day)’이라는 개념이 존재하지 않는다. 모든 개발 완료는 곧 출시를 의미하며, 이는 고객과의 피드백 루프를 극적으로 가속화하는 효과를 가져온다.4

두 CD의 전략적 선택

지속적 제공과 지속적 배포 사이의 선택은 기술적 우월성의 문제가 아니라, 조직의 비즈니스 특성과 리스크 수용 능력에 따른 전략적 결정이다. 예를 들어, 고도의 규제가 적용되는 금융이나 의료 산업, 또는 대규모 마케팅과 연계된 신기능 출시가 필요한 B2C 서비스의 경우, 배포 시점을 정밀하게 제어할 수 있는 지속적 제공이 더 적합할 수 있다. 반면, 빠른 실험과 반복을 통해 시장 적합성을 찾아야 하는 스타트업이나, 내부 관리 도구와 같이 배포 리스크가 낮은 시스템의 경우, 개발 속도를 극대화하는 지속적 배포가 유리할 수 있다.

아래 표는 CI, 지속적 제공, 지속적 배포의 핵심적인 차이점을 요약하여 보여준다. 이 세 가지 개념은 소프트웨어 전달 자동화의 성숙도를 나타내는 연속적인 스펙트럼으로 이해할 수 있으며, 조직은 자신들의 현재 상황과 목표에 맞춰 적절한 수준을 선택하고 점진적으로 발전시켜 나가야 한다.

구분지속적 통합 (CI)지속적 제공 (Continuous Delivery)지속적 배포 (Continuous Deployment)
정의코드 변경 사항을 주기적으로 빌드 및 테스트하여 메인 브랜치에 통합CI를 통과한 코드를 언제든 배포 가능한 상태로 준비테스트를 통과한 코드를 자동으로 프로덕션까지 배포
주요 목표통합 오류 조기 발견, 코드 품질 유지신뢰성 있고 예측 가능한 릴리스 프로세스 확립가치 전달 시간(Time to Value) 최소화
자동화 범위소스 코드 통합 ~ 단위/통합 테스트소스 코드 통합 ~ 프로덕션 배포 준비 (스테이징 환경)소스 코드 통합 ~ 프로덕션 배포 완료
프로덕션 배포해당 없음수동 (비즈니스 결정)자동 (파이프라인)
피드백 속도빠름 (개발팀 대상)매우 빠름 (QA/비즈니스팀 대상)가장 빠름 (고객 대상)

제 3장: 데브옵스(DevOps)와 CI/CD의 공생 관계

데브옵스(DevOps)와 CI/CD는 현대 소프트웨어 개발 담론에서 거의 항상 함께 언급되지만, 이 둘의 관계를 정확히 이해하는 것은 성공적인 기술 문화 혁신을 위해 필수적이다. 데브옵스는 기술적 실천(practice)이라기보다는 조직의 사일로를 허물고 개발(Development)과 운영(Operations) 간의 소통, 협업, 통합을 강조하는 문화적 철학이자 방법론이다.3 그 목표는 소프트웨어 개발 생명주기 전체를 최적화하여 더 빠르고, 안정적으로 가치를 전달하는 것이다.

이러한 데브옵스 철학을 현실 세계에서 구현 가능하게 만드는 핵심 동력이 바로 CI/CD 파이프라인이다. 만약 데브옵스가 ’어떻게 일해야 하는가’에 대한 문화적, 프로세스적 청사진을 제시한다면, CI/CD는 그 청사진을 실현하는 ’자동화된 기술 기반’을 제공한다.7 즉, CI/CD는 데브옵스의 하위 개념이나 단순한 도구가 아니라, 데브옵스라는 추상적인 목표를 구체적인 현실로 만드는 필수적인 파트너 관계에 있다.

이 둘의 공생 관계는 여러 측면에서 명확하게 드러난다.

  • CI/CD는 데브옵스의 목표를 기술적으로 실현한다: 데브옵스는 ’빠르고 안정적인 배포’를 지향한다. CI/CD 파이프라인은 코드 통합부터 테스트, 배포에 이르는 과정을 자동화함으로써 인적 오류를 줄이고, 릴리스 속도를 획기적으로 향상시킨다.3 개발자와 운영팀이 아이디어를 프로덕션 환경에 배포하여 사용자에게 가치를 전달하는 과정을 가속화하는 데 CI/CD 자동화가 핵심적인 역할을 한다.8
  • 데브옵스 문화는 CI/CD의 효과를 극대화한다: CI/CD 파이프라인은 필연적으로 실패(broken build)를 경험하게 된다. 전통적인 조직에서는 실패의 원인을 찾고 책임자를 비난하는 문화가 팽배했다. 하지만 실패를 학습의 기회로 보고, 공동 책임 의식을 가지는 데브옵스 문화에서는 팀이 비난 대신 협력을 통해 신속하게 파이프라인을 복구하는 데 집중한다.14 이러한 문화적 토대 없이는 CI/CD 파이프라인이 오히려 갈등의 원인이 될 수 있다.
  • 상호 발전을 촉진한다: CI/CD 파이프라인은 데브옵스를 실천하는 과정에서 발생하는 다양한 기술적 요구사항들을 수용하며 발전한다. 예를 들어, 마이크로서비스 아키텍처(MSA)의 복잡한 배포를 관리하고, 코드형 인프라(Infrastructure as Code, IaC)를 통해 환경 구성을 자동화하며, 배포된 서비스의 상태를 지속적으로 모니터링하는 기능들이 CI/CD 파이프라인에 통합된다.7 이처럼 CI/CD는 데브옵스를 구성하는 다른 기술 요소들과 시너지를 내며 함께 진화한다.

흥미로운 점은 CI/CD 파이프라인이 조직의 ’데브옵스 성숙도’를 측정하는 객관적인 지표로 활용될 수 있다는 사실이다. 데브옵스는 본질적으로 문화적 개념이기 때문에 그 성숙도를 정량적으로 측정하기가 매우 어렵다.3 그러나 잘 구축된 CI/CD 파이프라인은 구체적이고 측정 가능한 데이터를 끊임없이 생성한다. 대표적인 예가 DORA(DevOps Research and Assessment) 메트릭으로 알려진 네 가지 핵심 지표이다: 배포 빈도(Deployment Frequency), 변경 리드 타임(Lead Time for Changes), 평균 복구 시간(Mean Time to Recovery, MTTR), 변경 실패율(Change Failure Rate).19

이 지표들은 데브옵스가 추구하는 핵심 가치인 ’속도’와 ’안정성’이 조직 내에서 얼마나 잘 구현되고 있는지를 직접적으로 보여준다. 예를 들어, ’변경 리드 타임’이 짧고 ’배포 빈도’가 높다는 것은 개발과 운영이 긴밀하게 협력하고 자동화 수준이 높다는 명백한 증거다. ’MTTR’이 짧다는 것은 장애 발생 시 팀이 비난 없이 신속하게 협력하여 문제를 해결하는 문화가 정착되었음을 의미한다. 따라서 CI/CD 파이프라인에서 추출된 성능 지표를 분석하면, 조직의 추상적인 데브옵스 문화가 얼마나 내재화되었는지를 객관적으로 평가하고, 데이터에 기반하여 개선점을 도출할 수 있다. 이런 관점에서 CI/CD 파이프라인은 단순한 자동화 도구를 넘어, 조직의 개발 문화와 프로세스의 건강 상태를 진단하는 혈압계와 같은 역할을 수행한다고 볼 수 있다.

3. CI/CD 파이프라인의 구축과 기술 요소

3.1 CI/CD 파이프라인의 해부

CI/CD 파이프라인은 소스 코드에 변경 사항이 발생한 순간부터 시작하여, 해당 변경 사항이 빌드, 테스트, 그리고 최종적으로 사용자에게 배포되기까지 거치는 일련의 자동화된 단계(stage)들의 집합이다.8 이는 소프트웨어 전달 과정을 체계적이고 예측 가능하게 만드는 핵심 구조물 역할을 한다. 파이프라인은 일반적으로 여러 단계로 구성되며, 각 단계는 특정 목적을 가진 작업(job)들의 논리적 그룹이다. 한 단계의 모든 작업이 성공적으로 완료되어야 다음 단계로 진행되는 순차적 흐름을 가진다.

일반적인 CI/CD 파이프라인은 크게 네 가지 핵심 단계로 나눌 수 있다.22

1. 소스 (Source) 단계

파이프라인의 시작점이다. 이 단계의 핵심 활동은 개발자가 작성한 소스 코드를 버전 관리 시스템(VCS)에 통합하는 것이다.

  • 활동: 개발자는 새로운 기능 개발이나 버그 수정을 완료한 후, 자신의 코드 변경 사항을 Git과 같은 버전 관리 시스템의 특정 브랜치에 푸시(push)하거나, 풀 리퀘스트(Pull Request)를 통해 메인 브랜치로 병합(merge)을 요청한다.
  • 트리거: 버전 관리 시스템은 이러한 코드 변경 이벤트를 감지하고, 웹훅(Webhook)을 통해 CI 서버(예: Jenkins, GitLab CI)에 알림을 보낸다. 이 알림이 파이프라인 전체를 가동시키는 방아쇠 역할을 한다.11 이 단계는 모든 변경 사항의 출처와 이력을 추적할 수 있는 기반을 제공한다.

2. 빌드 (Build) 단계

소스 단계에서 트리거된 파이프라인은 빌드 단계로 진입한다. 이 단계의 목표는 텍스트 형태의 소스 코드를 실행 가능한 소프트웨어로 변환하는 것이다.

  • 활동: CI 서버는 소스 코드를 가져와 컴파일(compile)하고, Maven이나 npm과 같은 빌드 도구를 사용하여 프로젝트의 의존성(dependencies)을 해결한다. 최종적으로 실행 가능한 아티팩트(artifact)를 생성한다. 이 아티팩트는 Java 애플리케이션의 경우 .jar 또는 .war 파일일 수 있으며, 컨테이너 기반 환경에서는 Docker 이미지가 될 수 있다.11
  • 결과물: 이 단계가 성공적으로 끝나면, 이후 테스트 및 배포 단계에서 사용될, 버전이 부여된 배포 가능한 소프트웨어 패키지가 만들어진다. 빌드 실패 시 파이프라인은 즉시 중단되고 개발자에게 피드백이 전달된다.

3. 테스트 (Test) 단계

빌드 단계에서 생성된 아티팩트의 품질과 안정성을 검증하는 매우 중요한 단계이다. 이 단계의 목표는 버그가 프로덕션 환경으로 유입되는 것을 최대한 방지하는 것이다.

  • 활동: 파이프라인은 사전에 정의된 다양한 종류의 자동화 테스트를 순차적 또는 병렬적으로 실행한다.
  • 정적 분석 및 단위 테스트: 코드 스타일 가이드를 준수하는지 검사(linting)하고, 코드의 가장 작은 단위(함수, 메서드)가 개별적으로 올바르게 동작하는지 검증한다.
  • 통합 테스트: 여러 모듈이나 서비스가 함께 연동될 때 발생하는 문제를 확인한다.
  • 보안 테스트 (SAST): 소스 코드 자체를 분석하여 잠재적인 보안 취약점을 찾아낸다.12
  • 성능 테스트: 애플리케이션의 응답 시간, 처리량 등을 측정하여 성능 요구사항을 만족하는지 검사한다.
  • 목표: 모든 테스트를 통과해야만 해당 빌드가 배포 가능한 품질을 갖추었다고 판단할 수 있다. 테스트 중 하나라도 실패하면 파이프라인은 중단되고, 실패 원인에 대한 상세한 안내서가 개발팀에 제공된다.22

4. 배포 (Deploy) 단계

모든 테스트를 성공적으로 통과한 검증된 아티팩트를 실제 운영 환경에 배포하는 마지막 단계이다.

  • 활동: 파이프라인은 자동화된 스크립트를 사용하여 아티팩트를 특정 환경(개발, QA, 스테이징, 프로덕션)의 서버나 컨테이너 오케스트레이션 플랫폼(예: Kubernetes)에 배포한다. 이 과정에서 블루/그린, 카나리 등 다양한 배포 전략이 사용될 수 있다.17
  • 목표: 사용자에게 새로운 버전의 소프트웨어를 중단 없이 안정적으로 전달하는 것이다. 지속적 제공(Continuous Delivery) 모델에서는 이 단계가 수동 승인을 통해 트리거되며, 지속적 배포(Continuous Deployment) 모델에서는 자동으로 실행된다.

3.1.1 코드로서의 파이프라인 (Pipeline as Code, PaC)

현대적인 CI/CD 파이프라인의 가장 중요한 특징 중 하나는 ’코드로서의 파이프라인(Pipeline as Code, PaC)’이라는 개념이다.17 이는 위에서 설명한 파이프라인의 모든 단계, 작업, 구성을 텍스트 기반의 정의 파일로 작성하여 소스 코드와 함께 버전 관리 시스템에서 관리하는 방식을 말한다. Jenkins에서는 Jenkinsfile 25, GitLab CI에서는 .gitlab-ci.yml 27, GitHub Actions에서는 워크플로우 YAML 파일 28이 바로 이 역할을 한다.

PaC의 도입은 CI/CD 파이프라인을 단순한 ’자동화 스크립트’에서 조직의 ’핵심 자산(Asset)’으로 격상시키는 패러다임의 전환을 의미한다. 과거의 GUI 기반 설정 방식은 특정 전문가에게 종속되고 변경 이력을 추적하기 어려워 ’설정 드리프트(configuration drift)’나 ’블랙박스’와 같은 문제를 야기했다. 반면, PaC는 다음과 같은 강력한 이점을 제공한다.

  • 버전 관리 및 감사: 파이프라인의 모든 변경 사항이 Git 커밋으로 기록되므로, 누가, 언제, 무엇을 변경했는지 명확하게 추적할 수 있으며, 문제가 발생했을 때 특정 버전으로 쉽게 롤백할 수 있다.
  • 재사용성 및 일관성: 잘 정의된 파이프라인 코드는 템플릿처럼 여러 프로젝트에서 재사용될 수 있어, 조직 전체에 일관된 개발 및 배포 표준을 적용하기 용이하다.
  • 코드 리뷰 및 협업: 파이프라인 변경 사항도 애플리케이션 코드와 마찬가지로 풀 리퀘스트와 코드 리뷰 프로세스를 거치게 된다. 이를 통해 동료 검토를 거쳐 파이프라인의 안정성을 높이고, 팀원 간에 파이프라인에 대한 지식을 공유하며 협업을 촉진할 수 있다.
  • 가시성: 파이프라인의 동작 방식이 코드로 명확하게 정의되어 있으므로, 누구나 저장소를 통해 파이프라인의 전체 구조와 로직을 쉽게 파악할 수 있다.

결론적으로, Pipeline as Code는 파이프라인을 더 이상 일회성의 설정 작업이 아닌, 조직의 개발 및 배포 노하우가 집약된, 지속적으로 개선하고 관리할 수 있는 중요한 소프트웨어 자산으로 취급하게 만든다. 이는 나아가 GitOps와 같은 선언적 관리 모델의 기반이 되며, 전체 IT 운영 자동화의 초석 역할을 수행한다.

3.2 핵심 기술 스택과 도구 체인(Toolchain)

성공적인 CI/CD 파이프라인은 단일 도구로 완성되지 않는다. 소프트웨어 개발 생명주기의 각 단계를 지원하는 다양한 도구들이 유기적으로 연결된 ’도구 체인(Toolchain)’을 통해 구축된다. 이 도구 체인은 계획부터 코드 작성, 빌드, 테스트, 배포, 운영에 이르기까지 전 과정을 매끄럽게 자동화하는 역할을 한다.18 각 단계별 핵심 도구와 그 역할은 다음과 같다.

1. 계획 (Plan)

모든 개발 활동의 시작점으로, 요구사항을 정의하고 작업을 추적하며 팀의 협업을 조율한다.

  • 역할: 애자일 방법론에 기반하여 프로젝트의 목표를 설정하고, 에픽(Epic), 사용자 스토리(User Story), 작업(Task) 등으로 업무를 세분화하며, 스프린트 계획 및 백로그 관리를 수행한다.
  • 대표 도구:
  • Jira: Atlassian의 대표적인 프로젝트 관리 도구로, 이슈 추적, 칸반 보드, 스크럼 보드 등 강력한 기능을 통해 개발 작업의 흐름을 시각화하고 관리한다. Jira의 이슈는 개발 브랜치와 연동되어 작업의 시작점과 맥락을 제공한다.31

2. 코드 (Code) & 버전 관리 (Version Control)

개발자들이 실제 코드를 작성하고, 그 변경 이력을 체계적으로 관리하는 단계. CI/CD 파이p라인을 촉발하는 트리거 역할을 한다.

  • 역할: 소스 코드의 모든 변경 사항을 기록하고, 여러 개발자가 동시에 작업할 때 발생하는 충돌을 관리하며, 코드의 특정 시점으로 돌아갈 수 있는 기능을 제공한다.
  • 대표 도구:
  • Git: 현재 사실상의 표준으로 자리 잡은 분산 버전 관리 시스템이다. 브랜칭(branching)과 머징(merging) 모델을 통해 유연하고 강력한 협업 환경을 지원한다.29
  • Bitbucket / GitHub / GitLab: Git 저장소를 호스팅하는 웹 기반 서비스들이다. 단순한 코드 저장소 역할을 넘어, 코드 리뷰를 위한 풀 리퀘스트(Pull Request), 이슈 트래킹, 위키 등 협업에 필요한 다양한 기능을 통합 제공한다.31

3. 빌드 (Build) & CI 서버

코드 변경을 자동으로 감지하여 파이프라인의 핵심 자동화 로직을 실행하고 오케스트레이션하는 심장부이다.

  • 역할: Git 저장소로부터의 변경 사항을 트리거로 받아, 코드를 컴파일하고, 테스트를 실행하며, 배포 가능한 아티팩트를 생성하는 일련의 과정을 총괄한다.
  • 대표 도구:
특징JenkinsGitLab CI/CDGitHub Actions
호스팅셀프 호스팅(On-premise/Cloud)이 기본셀프 호스팅 및 GitLab.com(SaaS)GitHub.com(SaaS)이 기본, 셀프 호스팅 러너 지원
설정 방식Jenkinsfile (Groovy Script).gitlab-ci.yml (YAML)Workflow YAML 파일 (.github/workflows/)
통합성플러그인을 통한 무한한 확장성GitLab 플랫폼과 완벽 통합GitHub 플랫폼과 완벽 통합
생태계가장 오래되고 거대한 플러그인 생태계GitLab 자체 생태계 내에서 완결성 높음Marketplace를 통한 방대한 재사용 가능 Actions
장점최고의 유연성과 커스터마이징소스 코드 관리부터 배포까지 All-in-One 경험GitHub 생태계와의 강력한 연동, 방대한 커뮤니티
단점초기 설정 및 유지보수 복잡, 관리 부담GitLab에 종속적복잡한 파이프라인 시각화 및 관리 기능 상대적 부족
적합한 환경복잡하고 특수한 요구사항이 많은 대규모 조직GitLab을 주력으로 사용하는 조직GitHub 중심의 오픈소스 프로젝트 및 일반적인 기업

이 세 도구는 시장을 선도하며 각기 다른 철학과 장단점을 가지고 있어, 조직의 환경, 기존 기술 스택, 운영 능력 등을 고려하여 신중하게 선택해야 한다.25

4. 패키징 (Packaging) & 컨테이너화

빌드된 애플리케이션과 그 실행에 필요한 모든 종속성(라이브러리, 시스템 도구, 설정 파일 등)을 하나의 독립적인 패키지로 묶는 과정이다.

  • 역할: “내 컴퓨터에서는 되는데, 서버에서는 안돼요“와 같은 고질적인 환경 불일치 문제를 근본적으로 해결한다. 어떤 환경에서든 동일하게 실행되는 이식성 높은 배포 단위를 만든다.
  • 대표 도구:
  • Docker: 컨테이너 기술의 사실상 표준이다. Dockerfile이라는 텍스트 파일에 애플리케이션 환경을 코드로 정의하면, 이를 기반으로 가볍고 격리된 ’컨테이너 이미지’를 생성한다. 이 이미지는 개발, 테스트, 프로덕션 등 모든 환경에서 일관된 실행을 보장한다.7

5. 배포 (Deploy) & 오케스트레이션

수십, 수백 개의 컨테이너를 대규모 클러스터 환경에서 효율적으로 배포하고 관리하는 기술이다.

  • 역할: 컨테이너의 배포, 스케일링(확장/축소), 네트워킹, 로드 밸런싱, 장애 발생 시 자동 복구(자가 치유) 등 복잡한 운영 작업을 자동화한다.
  • 대표 도구:
  • Kubernetes (K8s): Google에서 시작된 오픈소스 컨테이너 오케스트레이션 플랫폼으로, 이 분야의 지배적인 표준이다. 선언적 API를 통해 원하는 시스템 상태를 정의하면, Kubernetes가 현재 상태를 그에 맞게 지속적으로 조정한다. 롤링 업데이트, 블루/그린 배포 등 다양한 배포 전략을 지원한다.7

6. 구성 (Configure) & 인프라 관리

서버, 네트워크, 스토리지 등 IT 인프라 자체를 코드를 통해 정의하고 관리하는 ’코드형 인프라(Infrastructure as Code, IaC)’를 실현한다.

  • 역할: 수동으로 서버를 설정하고 애플리케이션을 설치하는 대신, 모든 구성 정보를 코드로 관리하여 인프라 구축 과정을 자동화하고 반복 가능하게 만든다.
  • 대표 도구:
  • Ansible: 에이전트가 필요 없는 단순한 구조와 YAML 기반의 쉬운 문법을 특징으로 하는 구성 관리 도구다. CD 단계에서 서버에 필요한 소프트웨어를 설치하거나 설정을 변경하는 등, 환경 구성을 일관되게 유지하는 데 널리 사용된다.17
  • Terraform: 클라우드 인프라 프로비저닝에 특화된 도구로, AWS, GCP, Azure 등 다양한 클라우드 제공업체의 리소스를 코드로 생성하고 관리한다.

7. 모니터링 (Monitor) & 로깅

배포된 애플리케이션과 인프라의 상태를 지속적으로 관찰하고, 문제가 발생했을 때 신속하게 파악하여 피드백 루프를 완성하는 단계이다.

  • 역할: 애플리케이션의 성능 지표(응답 시간, 에러율), 시스템 리소스 사용량, 로그 데이터 등을 수집, 집계, 시각화한다. 이상 징후 발생 시 경고(alert)를 보내 운영팀이 신속하게 대응하도록 돕는다.
  • 대표 도구:
  • Prometheus & Grafana: Prometheus는 시계열 데이터를 수집하고 저장하는 모니터링 시스템이며, Grafana는 수집된 데이터를 시각적으로 아름다운 대시보드로 표현하는 도구다. 이 둘의 조합은 오픈소스 모니터링 스택의 표준으로 여겨진다.17
  • Datadog, New Relic: SaaS 형태의 통합 관찰 가능성(Observability) 플랫폼으로, 메트릭, 로그, APM(Application Performance Monitoring)을 하나의 솔루션에서 제공하여 문제 해결 과정을 단순화한다.17

이처럼 CI/CD 도구 체인은 각기 다른 전문 영역을 가진 도구들이 파이프라인을 중심으로 긴밀하게 통합되어, 아이디어에서 코드, 그리고 운영에 이르기까지의 전 과정을 자동화하고 가속화하는 강력한 시스템을 구성한다.

4. 고도화 전략과 모범 사례

4.1 브랜칭 및 배포 전략

성숙한 CI/CD 파이프라인을 구축하기 위해서는 단순히 도구를 연결하는 것을 넘어, 조직의 개발 문화와 비즈니스 요구사항에 맞는 전략적 선택이 필요하다. 그중에서도 코드 협업의 규칙을 정하는 ’브랜칭 전략’과 사용자에게 새로운 버전을 전달하는 방식을 결정하는 ’배포 전략’은 파이프라인의 효율성과 안정성에 지대한 영향을 미친다.

4.1.1 브랜칭 전략 심층 비교

브랜칭 전략은 여러 개발자가 동일한 코드베이스에서 동시에 작업할 때 발생하는 혼란을 최소화하고, 코드의 안정성을 유지하기 위한 규칙의 집합이다. 대표적인 두 가지 전략은 GitFlow와 Trunk-Based Development이다.

  • GitFlow:

이 전략은 Vincent Driessen에 의해 제안된 모델로, 여러 종류의 장기 실행 브랜치(long-lived branches)를 사용하여 개발, 릴리스, 유지보수 과정을 엄격하게 분리하는 것이 특징이다.17 주요 브랜치는 다음과 같다.

  • main (또는 master): 항상 배포 가능한, 안정된 프로덕션 코드만을 포함한다.
  • develop: 다음 릴리스를 위해 개발 중인 최신 코드를 통합하는 브랜치.
  • feature: 새로운 기능 개발을 위해 develop 브랜치에서 분기. 개발이 완료되면 다시 develop으로 병합된다.
  • release: 프로덕션 릴리스를 준비하기 위해 develop에서 분기. 이 브랜치에서는 버그 수정, 문서화 등 릴리스에 필요한 최종 작업만 수행된다. 준비가 완료되면 maindevelop 브랜치 양쪽에 병합된다.
  • hotfix: 프로덕션 환경에서 발생한 긴급한 버그를 수정하기 위해 main에서 직접 분기. 수정 후 maindevelop에 병합된다.

GitFlow는 대규모 프로젝트나 정기적인 릴리스 주기를 가진 소프트웨어(예: 설치형 패키지)에서 버전 관리를 명확하게 하고, 여러 버전의 유지보수를 병행해야 할 때 강력한 구조를 제공한다.40 하지만 브랜치 구조가 복잡하고,

feature 브랜치가 오래 유지될 경우 develop 브랜치와의 차이가 커져 나중에 병합할 때 ’머지 헬(merge hell)’을 유발할 수 있다. 이러한 특성 때문에 매일 여러 번 코드를 통합하고 배포하는 CI/CD 환경과는 상성이 좋지 않다는 평가를 받는다.39

  • Trunk-Based Development (TBD):

이 전략은 모든 개발자가 ’트렁크(trunk)’라고 불리는 단일 메인 브랜치(main)를 중심으로 작업하는 것을 원칙으로 한다.39 새로운 기능 개발은 필요시 매우 짧게 유지되는(short-lived) 피처 브랜치에서 진행하되, 작업이 완료되면 즉시(보통 하루 이내) 트렁크로 병합한다.

TBD는 지속적 통합(CI)의 철학을 가장 잘 구현하는 전략이다. 모든 변경 사항이 중앙 트렁크로 빠르게 통합되기 때문에 코드 간의 차이가 크게 벌어질 일이 없고, 통합으로 인한 마찰과 비용이 최소화된다.41 개발자들은 항상 최신 코드를 기반으로 작업하며, 피드백 루프가 매우 빠르다. TBD의 핵심은 트렁크 브랜치가 항상 건강하고 ’배포 가능한 상태(releasable state)’를 유지하는 것이다. 이를 위해서는 강력한 자동화 테스트 스위트와 철저한 코드 리뷰 문화가 반드시 뒷받침되어야 한다. 또한, 아직 완성되지 않은 기능이 트렁크에 병합되어 프로덕션에 배포되는 것을 막기 위해, 코드 상에서 특정 기능의 활성화 여부를 제어하는 ‘피처 플래그(Feature Flag)’ 또는 ‘피처 토글(Feature Toggle)’ 기술을 함께 사용하는 것이 일반적이다.39

4.1.2 배포 전략 심층 비교

배포 전략은 테스트를 통과한 새로운 버전의 소프트웨어를 프로덕션 환경에 어떻게 적용할 것인지를 결정하는 방법론이다. 목표는 서비스 중단 없이(zero downtime), 그리고 배포로 인한 리스크를 최소화하면서 안정적으로 업데이트를 완료하는 것이다.

  • 롤링 배포 (Rolling Update): 구버전의 애플리케이션 인스턴스를 한 번에 모두 교체하는 대신, 일부를 점진적으로 신버전 인스턴스로 교체해 나가는 방식이다. 예를 들어 10개의 구버전 인스턴스가 있다면, 신버전 인스턴스 2개를 띄우고 구버전 2개를 내리는 과정을 5번 반복한다. 쿠버네티스와 같은 컨테이너 오케스트레이션 도구에서 기본적으로 지원하는 배포 방식이다.43
  • 블루/그린 배포 (Blue/Green Deployment): 현재 운영 중인 환경(Blue)과 완전히 동일한 사양의 새로운 환경(Green)을 별도로 구축하고, 신버전을 Green 환경에 배포한다. 모든 테스트가 완료되면, 로드 밸런서(Load Balancer)를 조작하여 모든 사용자 트래픽을 Blue에서 Green으로 한 번에 전환한다.17 이 방식의 가장 큰 장점은 배포에 문제가 발생했을 때, 트래픽을 즉시 Blue 환경으로 되돌리기만 하면 되므로 롤백이 매우 빠르고 안전하다는 것이다.42 하지만 운영 환경을 2세트 유지해야 하므로 인프라 비용이 2배로 드는 명확한 단점이 있다.42
  • 카나리 배포 (Canary Deployment): 과거 광부들이 탄광에 들어갈 때 유독가스에 민감한 카나리아 새를 데리고 들어가 위험을 감지했던 것에서 유래한 이름이다. 이 전략은 신버전을 전체 사용자에게 한 번에 공개하는 대신, 아주 일부의 사용자(예: 내부 직원, 특정 지역 사용자, 전체 트래픽의 5%)에게만 먼저 배포하여 실제 운영 환경에서의 반응을 살피는 방식이다.17 신버전에서 오류율 증가나 성능 저하와 같은 문제가 발견되지 않으면, 점진적으로 트래픽 비중을 늘려 최종적으로 모든 트래픽을 신버전으로 전환한다. 이 방식은 실제 사용자 트래픽을 통해 신버전의 위험성을 최소화하며 검증할 수 있고, 특정 사용자 그룹을 대상으로 신기능의 효과를 측정하는 A/B 테스팅에도 매우 유용하다.44 하지만 두 버전을 동시에 운영하고 트래픽을 정교하게 제어해야 하므로 구현 복잡도가 높다.43
  • 섀도우 배포 (Shadow Deployment / Traffic Mirroring): 카나리 배포보다 더 조심스러운 접근법이다. 이 방식은 실제 운영 트래픽을 복제하여 신버전 시스템에도 동일하게 전송한다. 하지만 신버전의 응답은 사용자에게 반환되지 않고, 시스템 내부에서 버려진다. 오직 신버전이 실제 트래픽을 처리하면서 발생하는 오류나 성능 데이터만을 수집하여 분석하는 데 목적이 있다.43 사용자에게 아무런 영향을 주지 않으면서 프로덕션 환경과 동일한 부하 조건에서 신버전의 안정성을 완벽하게 테스트할 수 있다는 장점이 있지만, 트래픽을 복제하고 라우팅하는 기술적 구현이 매우 복잡하다.

이러한 배포 전략의 발전 과정은 ’배포’라는 행위에 대한 인식이 ’일회성의 기술적 이벤트’에서 ’지속적인 비즈니스 검증 프로세스’로 변화했음을 보여준다. 과거의 배포는 서비스를 중단시키는 위험하고 큰 행사였다. 롤링 및 블루/그린 배포는 ’무중단’을 실현했지만, 여전히 배포가 완료되면 모든 사용자가 신버전을 사용하게 되는 ‘사후 대응적’ 방식에 머물렀다.

그러나 카나리 배포와 섀도우 배포는 패러다임을 전환했다. 이들은 배포 과정 자체를 ’가설 검증’의 기회로 활용한다. “신버전은 구버전보다 더 안정적이고 성능이 우수하며, 사용자 전환율을 높일 것이다“라는 가설을 실제 트래픽의 일부를 통해 과학적으로 테스트하는 것이다.42 세계적인 스트리밍 서비스 Netflix는 ’Kayenta’라는 자동화된 카나리 분석 시스템을 구축하여, 신버전(Canary)과 구버전(Baseline) 클러스터의 수많은 성능 메트릭을 통계적으로 비교하고, 그 결과에 따라 배포의 성공 여부를 자동으로 판단한다.42 이는 배포가 더 이상 개발의 끝이 아니라, 데이터 기반의 학습과 점진적 개선의 시작점이 되었음을 의미한다. 이처럼 고도화된 배포 전략은 비즈니스 리스크를 최소화하면서 혁신을 가속화하는 강력한 무기이다.

4.2 파이프라인 보안: DevSecOps로의 전환

소프트웨어 개발 속도를 높이는 CI/CD의 확산은 새로운 도전 과제를 낳았다. 바로 ’보안’이다. 자동화된 파이프라인을 통해 코드가 빠르게 프로덕션 환경으로 배포되면서, 기존의 수동적이고 개발 후반부에 집중되었던 보안 검증 방식은 더 이상 유효하지 않게 되었다. 이러한 배경에서 등장한 것이 바로 DevSecOps이다.

DevSecOps는 개발(Dev), 보안(Sec), 운영(Ops)을 하나로 통합하여, 소프트웨어 개발 생명주기(Software Development Life Cycle, SDLC)의 모든 단계에 보안을 처음부터 내재화하려는 문화이자 실천 방법론이다.45 그 핵심 철학은 ‘Shift-Left’ 원칙으로 요약된다. 이는 전통적으로 SDLC의 오른쪽 끝(배포 직전 또는 운영 단계)에서 수행되던 보안 활동을 왼쪽(계획, 설계, 코딩 단계)으로 이동시키는 것을 의미한다.46 소프트웨어 버그와 마찬가지로, 보안 취약점 역시 개발 초기 단계에서 발견할수록 수정하는 데 드는 비용과 노력이 기하급수적으로 줄어든다는 경험적 법칙에 근거한다.

OWASP(Open Web Application Security Project)에서는 DevSecOps Guideline을 통해 안전한 파이프라인을 구축하기 위한 구체적인 모범 사례와 도구들을 제시하고 있다. 그 목표는 “보안 이슈(설계 결함 또는 애플리케이션 취약점)를 가능한 한 빨리 탐지하는 것“이다.47

CI/CD 파이프라인의 각 단계에 DevSecOps를 적용하는 구체적인 활동은 다음과 같다 46:

  • 1. 계획 및 설계 (Planning & Design) 단계:

  • 위협 모델링 (Threat Modeling): 코드를 작성하기 전에, 시스템의 아키텍처를 분석하고 잠재적인 공격 경로와 보안 위협을 식별하여 설계 단계에서부터 보안을 고려한다.46 이는 “어떻게 공격당할 수 있는가?“라는 질문에 미리 답하는 과정이다.

  • 2. 코드 (Code) / Pre-commit 단계:

  • 시크릿 스캐닝 (Secret Scanning): 개발자가 실수로 API 키, 비밀번호, 인증서와 같은 민감 정보를 코드에 하드코딩하여 Git 저장소에 커밋하는 것을 방지한다. Gitleaks, TruffleHog와 같은 도구를 Pre-commit hook에 통합하여 커밋 이전에 자동으로 검사한다.50

  • IDE 보안 플러그인: 개발자가 코드를 작성하는 통합 개발 환경(IDE)에 보안 분석 플러그인을 설치하여, 코딩하는 동안 실시간으로 잠재적인 취약점에 대한 피드백을 제공한다.

    1. 빌드 및 테스트 (Build & Test) / CI 단계:

이 단계는 자동화된 보안 테스트를 통합하기에 가장 이상적인 지점이다.

  • SAST (Static Application Security Testing): 소스 코드, 바이트 코드, 바이너리를 정적으로 분석하여 SQL 인젝션, 크로스 사이트 스크립팅(XSS) 등 OWASP Top 10에 해당하는 알려진 유형의 취약점을 찾아낸다. SonarQube, Checkmarx, Semgrep과 같은 도구가 사용되며, 빌드 과정의 일부로 실행된다.17

  • SCA (Software Composition Analysis): 현대 애플리케이션은 수많은 오픈소스 라이브러리와 프레임워크에 의존한다. SCA 도구는 프로젝트가 사용하는 모든 외부 의존성을 분석하여, 알려진 보안 취약점(CVE)을 포함하고 있는지 검사한다. Snyk, Trivy, OWASP Dependency-Check 등이 대표적이며, 의존성 혼동(Dependency Confusion)과 같은 공급망 공격(Supply Chain Attack)을 방어하는 데 필수적이다.46

  • IaC 스캐닝 (Infrastructure as Code Scanning): Terraform, Ansible, Kubernetes 매니페스트와 같은 인프라 구성 코드에 보안 설정 오류나 모범 사례 위반이 있는지 검사한다. Checkov, tfsec, kube-score와 같은 도구들이 사용된다.49

  • 4. 배포 (Deploy) / CD 단계:

  • 컨테이너 이미지 스캐닝: Docker와 같은 컨테이너 이미지를 레지스트리에 푸시하기 전이나, Kubernetes 클러스터에 배포하기 전에 이미지 내부에 포함된 운영체제 패키지나 라이브러리의 취약점을 스캔한다. Trivy, Clair와 같은 도구가 널리 사용된다.51

  • DAST (Dynamic Application Security Testing): 스테이징이나 운영 환경에 배포되어 실행 중인 애플리케이션을 대상으로, 외부 공격자의 관점에서 실제 공격을 시뮬레이션하여 런타임 환경에서만 발견될 수 있는 취약점(예: 서버 설정 오류, 인증/세션 관리 문제)을 찾아낸다. OWASP ZAP이 대표적인 오픈소스 DAST 도구다.49

  • IAST (Interactive Application Security Testing): DAST와 SAST의 장점을 결합한 방식으로, 애플리케이션 내부에 에이전트를 설치하여 실행 중인 코드의 데이터 흐름을 실시간으로 모니터링한다. 이를 통해 DAST보다 더 정확하게 취약점의 근본 원인을 파악할 수 있다.49

  • 파이프라인 자체의 보안:

  • 접근 제어: CI/CD 파이프라인은 프로덕션 환경에 접근할 수 있는 강력한 권한을 가지므로, 그 자체로 중요한 공격 대상이 된다. 따라서 ’최소 권한 원칙(Principle of Least Privilege)’에 따라 파이프라인 실행 주체(service account 등)에 필요한 최소한의 권한만을 부여하고, 개발자나 운영자의 파이프라인 설정 접근 권한도 역할 기반으로 엄격하게 통제해야 한다.46

DevSecOps의 도입은 단순히 보안 도구를 파이프라인에 추가하는 것을 의미하지 않는다. 이는 보안을 ’품질’의 한 중요한 측면으로 재정의하고, 그 책임을 개발자에게로 전환시키는 근본적인 문화적 변화를 수반한다. 전통적으로 보안은 개발이 완료된 후 별도의 보안팀이 수행하는 ‘관문(gate)’ 역할이었고, 이는 종종 개발 프로세스의 병목이자 팀 간 갈등의 원인이었다. 그러나 DevSecOps 환경에서 개발자는 자신의 코드가 기능 테스트뿐만 아니라 자동화된 보안 테스트까지 통과해야만 빌드가 성공하고 배포가 가능하다는 것을 인지하게 된다. ’빌드가 깨졌다’는 개념에 ’보안 요구사항 미충족’이 포함되는 것이다. 결과적으로, 개발자는 더 이상 보안을 남의 일이 아닌 자신의 코드가 갖추어야 할 필수 품질 요건으로 인식하게 되며, 이는 보안에 대한 주인의식(ownership)을 고취시켜 조직 전체의 보안 수준을 근본적으로 향상시키는 결과를 낳는다.

4.3 성공적인 CI/CD를 위한 모범 사례

CI/CD 파이프라인을 성공적으로 구축하고 운영하기 위해서는 기술적 구현을 넘어, 검증된 모범 사례들을 조직의 문화와 프로세스에 내재화하는 것이 중요하다. 이러한 모범 사례들은 공통적으로 소프트웨어 개발 및 전달 과정의 ’낭비(waste)’를 제거하고, ’가치 흐름(value stream)’을 최적화하는 데 초점을 맞춘다.

4.3.1 빠른 피드백 루프 구축 (Building Fast Feedback Loops)

CI/CD의 가장 핵심적인 가치는 피드백 루프를 단축하는 데 있다.52 코드 변경 후 그 결과(성공, 실패, 성능 저하, 보안 취약점 등)를 가능한 한 빨리 개발자에게 전달해야 한다. 피드백이 빠를수록 개발자는 문제의 원인이 된 코드에 대한 맥락(context)을 잃지 않은 상태에서 즉시 수정에 착수할 수 있으며, 이는 평균 복구 시간(MTTR)을 극적으로 단축시킨다.52

빠른 피드백 루프를 구축하기 위한 구체적인 방법론은 다음과 같다.

  • 테스트 순서 최적화: 파이프라인의 초기 단계에는 실행 시간이 짧고 비용이 적게 드는 테스트를 배치해야 한다. 예를 들어, 코드 스타일을 검사하는 린팅(linting)이나 단위 테스트(unit tests)는 수 초에서 수 분 내에 완료되므로 가장 먼저 실행하는 것이 좋다. 반면, 전체 시스템을 가동해야 하는 느리고 비용이 많이 드는 종단 간 테스트(End-to-End tests)는 파이프라인의 후반부에 배치하거나, 필요에 따라 별도의 스케줄로 실행하는 것을 고려해야 한다.17
  • 병렬 실행 (Parallelization): 서로 의존성이 없는 테스트 작업들은 동시에 병렬로 실행하여 전체 파이프라인의 실행 시간을 단축할 수 있다. 예를 들어, 여러 브라우저 환경에 대한 UI 테스트나, 각기 다른 마이크로서비스에 대한 통합 테스트를 병렬로 처리할 수 있다.17
  • 즉각적인 알림: 파이프라인의 실패는 즉시 관련 팀원들에게 알려져야 한다. CI/CD 도구를 Slack, Microsoft Teams, 이메일 등 팀이 주로 사용하는 커뮤니케이션 채널과 통합하여, 빌드 실패 시 관련 로그와 함께 실시간 알림을 보내도록 구성해야 한다.54
  • 다층적 피드백 채널: 피드백은 CI 파이프라인 내에서만 발생하는 것이 아니다. 코드 리뷰(Pull Request), 정적 분석 도구의 자동 코멘트, 배포된 환경의 성능을 모니터링하는 도구(Prometheus, Datadog), 그리고 최종 사용자의 피드백 채널(고객 지원, 설문 등)까지, 다양한 채널을 통해 얻어지는 모든 종류의 피드백을 수집하고 개발 프로세스에 반영하는 체계를 구축해야 한다.38

CircleCI가 3천만 개의 워크플로우를 분석한 데이터에 따르면, 빌드 실패 후 복구까지 걸리는 시간(MTTR)의 중앙값은 17.5시간에 달했지만, 상위 10%의 고성과 팀은 단 10분 이내에 문제를 해결하고 빌드를 복구했다.52 이는 빠른 피드백 루프가 얼마나 큰 차이를 만드는지를 명확히 보여주는 증거다.

4.3.2 파이프라인 및 테스트 전략 최적화

  • 파이프라인 성능 최적화: 빠른 피드백을 위해서는 파이프라인 자체의 성능도 중요하다. 매 빌드마다 모든 의존성 라이브러리를 새로 다운로드하는 것은 큰 시간 낭비다. **의존성 캐싱(Dependency Caching)**을 활용하여 이전 빌드에서 사용된 의존성을 재사용하면 빌드 시간을 크게 단축할 수 있다. 또한, 애플리케이션을 패키징하는 컨테이너의 경량 베이스 이미지를 사용하면 이미지 빌드 및 전송 시간을 줄일 수 있으며, 빌드를 실행하는 러너(runner) 또는 에이전트의 사양을 프로젝트의 규모와 복잡도에 맞게 적절히 설정하는 것도 중요하다.56
  • 신뢰할 수 있는 자동화 테스트: 자동화된 테스트가 빈번하게 이유 없이 실패하거나(불안정한 테스트, flaky tests), 실제 버그를 놓치는 경우가 많아지면 개발자들은 테스트 결과를 불신하게 되고, 이는 CI/CD 문화 전체를 훼손시킨다. 테스트 코드도 프로덕션 코드와 동일한 수준의 품질 관리와 지속적인 리팩토링이 필요하다.57

4.3.3 마틴 파울러의 CI 모범 사례

소프트웨어 개발의 권위자인 마틴 파울러(Martin Fowler)가 제시한 지속적 통합의 모범 사례들은 오늘날에도 여전히 유효하며, 성공적인 CI/CD 구현의 근간을 이룬다.10

  1. 단일 소스 저장소 유지 (Maintain a Single Source Repository): 빌드에 필요한 모든 것(소스 코드, 테스트 코드, 빌드 스크립트, DB 스키마 등)은 하나의 버전 관리 시스템에 보관되어야 한다.
  2. 빌드 자동화 (Automate the Build): 누구든 저장소에서 코드를 체크아웃하여 한 번의 명령으로 전체 시스템을 빌드할 수 있어야 한다.
  3. 빌드를 자가 테스트되게 하라 (Make Your Build Self-Testing): 빌드 스크립트는 컴파일뿐만 아니라, 포괄적인 자동화 테스트 스위트를 실행하여 코드의 건강 상태를 검증해야 한다.
  4. 모두가 매일 메인라인에 커밋하라 (Everyone Commits To the Mainline Every Day): 개발자들은 자신의 작업을 하루에 최소 한 번 이상 메인 브랜치(트렁크)에 통합해야 한다.
  5. 모든 커밋은 메인라인에서 빌드를 유발해야 한다 (Every Commit Should Build the Mainline on an Integration Machine): CI 서버는 메인라인에 대한 모든 커밋을 감지하여 즉시 통합 빌드를 시작해야 한다.
  6. 깨진 빌드는 즉시 수정하라 (Fix Broken Builds Immediately): 빌드가 깨지는 것은 전체 팀의 작업을 중단시키는 최우선 순위의 문제다. 새로운 기능을 시작하기 전에 반드시 빌드를 먼저 수정해야 한다.
  7. 빌드를 빠르게 유지하라 (Keep the Build Fast): 피드백 루프를 짧게 유지하기 위해 전체 통합 빌드는 약 10분 이내에 완료되는 것을 목표로 해야 한다.
  8. 프로덕션 환경의 복제본에서 테스트하라 (Test in a Clone of the Production Environment): 테스트 환경과 프로덕션 환경의 차이로 인해 발생하는 문제를 피하기 위해, 두 환경을 최대한 동일하게 유지해야 한다.
  9. 누구나 최신 실행 파일을 쉽게 얻을 수 있게 하라 (Make it Easy for Anyone to Get the Latest Executable): 성공적으로 빌드된 최신 버전은 누구나 쉽게 접근하여 테스트하거나 데모할 수 있어야 한다.
  10. 모두가 무슨 일이 일어나고 있는지 볼 수 있게 하라 (Everyone can see what’s happening): CI 파이프라인의 상태와 결과는 투명하게 공개되어야 한다.
  11. 배포를 자동화하라 (Automate Deployment): 빌드된 아티팩트를 어떤 환경에든 배포하는 과정을 자동화해야 한다.

이러한 모범 사례들의 기저에는 ’낭비(Waste) 제거’라는 린(Lean) 제조 방식의 철학이 깊게 자리 잡고 있다. ’빠른 피드백 루프’는 결함을 찾고 수정하기 위해 기다리는 시간(대기 낭비)을, ’파이프라인 성능 최적화’는 빌드와 배포에 소요되는 시간(과잉 처리 낭비)을, ‘깨진 빌드 즉시 수정’ 원칙은 결함이 하위 공정으로 흘러가 더 큰 문제를 야기하는 것(결함 낭비)을 방지한다. 결국 CI/CD를 성공적으로 구현하는 것은 단순히 기술적 프랙티스를 따르는 것을 넘어, 소프트웨어 개발 프로세스에 린 철학을 적용하여 가치 전달 흐름을 최적화하는 과정이라 할 수 있다.

5. CI/CD의 확장과 미래

5.1 GitOps: 선언적 인프라 관리의 새로운 패러다임

CI/CD의 진화 과정에서 등장한 GitOps는 특히 쿠버네티스(Kubernetes)와 같은 클라우드 네이티브 환경에서 애플리케이션과 인프라를 관리하는 방식을 근본적으로 바꾸고 있는 새로운 패러다임이다. GitOps는 Weaveworks사에 의해 처음 제안된 개념으로, 애플리케이션 배포와 운영에 관련된 모든 요소(애플리케이션 코드, 인프라 구성, 정책 등)를 코드로 정의하고, 버전 관리 시스템인 **Git 저장소를 ‘단일 진실 공급원(Single Source of Truth, SSoT)’**으로 사용하는 운영 모델이다.45

GitOps의 핵심 원리는 ‘선언적(declarative)’ 구성과 ’자동화된 상태 동기화’에 있다.

  1. 선언적 정의: 시스템이 갖추어야 할 ’의도된 상태(Desired State)’를 Kubernetes 매니페스트(YAML 파일), Terraform 코드 등 선언적 형식의 파일로 작성하여 Git 저장소에 저장한다.59 이는 “CPU를 80%까지 사용하라“와 같은 명령형(imperative) 지시가 아니라, “이 애플리케이션은 3개의 복제본(replica)을 가져야 한다“와 같이 최종 목표 상태를 기술하는 방식이다.
  2. 상태 비교 및 자동 조정: GitOps 에이전트(Agent) 소프트웨어가 실제 운영 환경(예: Kubernetes 클러스터)과 Git 저장소에 정의된 의도된 상태를 지속적으로 비교한다.
  3. 자동 동기화: 만약 두 상태 간에 차이(drift)가 감지되면, 에이전트는 별도의 지시 없이 자동으로 운영 환경을 Git에 정의된 상태와 일치하도록 조정한다. 예를 들어, 운영 중인 복제본 하나가 장애로 중단되면, 에이전트는 이를 감지하고 즉시 새로운 복제본을 생성하여 의도된 상태인 ’3개’를 맞춘다.

GitOps의 배포 모델은 전통적인 CI/CD 파이프라인과 다른 접근 방식을 취하며, 이는 Push 방식과 Pull 방식으로 나뉜다.60

  • Push-based (전통적 방식): Jenkins나 GitLab CI와 같은 외부 CI/CD 도구가 빌드와 테스트를 완료한 후, kubectl apply와 같은 명령을 실행하여 변경 사항을 Kubernetes 클러스터에 직접 밀어넣는(push) 방식이다. 이는 파이프라인 시스템이 클러스터에 접근할 수 있는 강력한 자격증명(credential)을 가져야 하므로 보안상 취약점이 될 수 있다.
  • Pull-based (GitOps 권장 방식): Kubernetes 클러스터 내부에 Argo CD나 Flux와 같은 GitOps 에이전트를 설치한다. 이 에이전트는 주기적으로 Git 저장소를 감시(pull)하다가, 의도된 상태에 변경 사항이 생기면 이를 감지하고 클러스터 내부에서 직접 변경 사항을 적용한다. 이 방식은 클러스터 외부에서 내부로의 직접적인 접근을 필요로 하지 않으므로 보안성이 뛰어나며, 클러스터의 자율성을 보장한다.60

GitOps는 DevOps를 구현하는 매우 구체적이고 효과적인 실천 방법론으로, 개발자 경험을 크게 향상시킨다. 개발자들은 인프라 변경을 위해 별도의 도구나 콘솔에 접근할 필요 없이, 이미 익숙한 Git과 풀 리퀘스트(Pull Request) 워크플로우를 통해 애플리케이션 코드 변경과 인프라 변경을 동일한 방식으로 처리할 수 있다.7 모든 변경 사항은 Git 이력에 명확히 기록되므로 감사 추적이 용이하며, 문제가 발생했을 때 특정 커밋으로 되돌리는 것만으로 시스템 전체를 이전의 안정된 상태로 신속하게 복구할 수 있다.7

GitOps의 등장은 CI와 CD의 역할을 근본적으로 분리하고 재정의하는 중요한 변화를 가져왔다. 전통적인 파이프라인에서 CD는 ’명령형 스크립트를 실행하는 행위’였다. 그러나 GitOps의 Pull 모델에서는 CI 파이프라인의 책임이 ’배포 가능한 아티팩트(예: Docker 이미지)를 빌드하고, 그 이미지의 태그를 Git 저장소의 매니페스트 파일에 업데이트하는 것’까지로 명확하게 한정된다. CI 파이프라인은 더 이상 프로덕션 환경에 직접 접근할 필요가 없어진다.

그리고 CD의 역할은 클러스터 내의 GitOps 에이전트가 전담하게 된다. 이 에이전트의 임무는 ’명령 실행’이 아니라 ’상태 동기화’이다. 이는 시스템 운영의 패러다임을 ’행위 기반’에서 ’상태 기반’으로 전환시키는 근본적인 차이를 만든다. 이러한 역할 분리는 보안을 강화하고(CI의 권한 축소), 시스템의 예측 가능성과 신뢰성을 높이며(선언적 상태 관리), 개발과 운영의 책임 경계를 명확하게 구분하는 효과를 낳는다. CI는 ’무엇을(What) 배포할 것인가’를 결정하고, GitOps는 ’시스템이 어떤 상태여야 하는가(How)’를 보장하는 구조로 진화하는 것이다.

5.2 CI/CD의 지능화: AIOps와 MLOps

CI/CD 파이프라인은 자동화를 통해 효율성을 극대화했지만, 시스템이 복잡해짐에 따라 파이프라인 자체의 운영과 관리에서 새로운 도전 과제들이 발생하고 있다. 방대한 양의 로그와 메트릭 속에서 장애의 근본 원인을 찾거나, 미묘한 성능 저하를 감지하는 것은 인간의 능력만으로는 한계에 부딪힌다. 이러한 배경에서 인공지능(AI)과 머신러닝(ML) 기술을 IT 운영에 접목하려는 시도가 활발해지고 있으며, 이는 AIOps와 MLOps라는 두 가지 주요 흐름으로 나타나고 있다.

5.2.1 AIOps (AI for IT Operations)와 CI/CD

AIOps는 IT 운영에서 발생하는 대규모 데이터(로그, 메트릭, 이벤트 등)를 수집하고, 여기에 머신러닝과 빅데이터 분석 기술을 적용하여 문제의 근본 원인을 분석하고, 이상 징후를 탐지하며, 반복적인 작업을 자동화하는 접근법이다. IT 컨설팅 기업 Gartner는 AIOps를 “빅데이터와 머신러닝을 활용하여 이벤트 상관관계 분석, 이상 징후 탐지, 인과관계 규명 등 IT 운영 프로세스를 자동화하는 것“으로 정의한다.61

AIOps는 CI/CD 파이프라인의 지능을 한 단계 높이는 데 다음과 같이 활용될 수 있다.63

  • 지능형 이상 탐지 (Intelligent Anomaly Detection): AIOps 플랫폼은 파이프라인의 정상적인 동작 패턴(예: 평균 빌드 시간, 성공률, 테스트 단계별 소요 시간, 리소스 사용량)을 학습한다. 만약 특정 빌드가 평소보다 현저히 오래 걸리거나 실패율이 급증하는 등 비정상적인 패턴이 감지되면, 이것이 심각한 장애로 발전하기 전에 운영팀에 예측 경고를 보낼 수 있다.
  • 자동화된 근본 원인 분석 (Automated Root Cause Analysis): 빌드나 배포가 실패했을 때, 개발자는 수많은 로그와 시스템 메트릭을 뒤져 원인을 찾아야 한다. AIOps는 다양한 데이터 소스를 자동으로 상호 연관시켜 분석하고, “새로운 라이브러리 의존성 추가 커밋이 테스트 실패율 증가와 시간적으로 일치한다“와 같이 가장 가능성 높은 근본 원인을 제시해준다. 이는 문제 해결에 걸리는 시간(MTTR)을 획기적으로 단축시킨다.61
  • 지능형 카나리 배포 (Intelligent Canary Analysis): Gartner가 AIOps의 주요 사용 사례로 꼽는 분야이다.62 카나리 배포 시, AIOps는 신규 버전과 기존 버전의 성능 메트릭(오류율, 응답 시간, CPU 사용량 등)을 실시간으로 비교 분석한다. 만약 신규 버전에서 통계적으로 유의미한 성능 저하가 감지되면, 사람의 개입 없이 자동으로 트래픽 증가를 중단하고 롤백을 수행하도록 파이프라인을 제어할 수 있다.
  • 리소스 최적화: 과거의 빌드 데이터와 리소스 사용 패턴을 분석하여, 각 프로젝트나 빌드 작업에 필요한 최적의 컴퓨팅 리소스(CPU, 메모리)를 예측하고 동적으로 할당한다. 이를 통해 클라우드 비용을 절감하고 빌드 에이전트의 활용률을 높일 수 있다.

5.2.2 MLOps (Machine Learning Operations)

MLOps는 머신러닝 모델의 개발(Dev)과 운영(Ops)을 통합하는 개념으로, CI/CD 원칙을 머신러닝 생명주기에 적용한 것이다.45 일반적인 소프트웨어와 머신러닝 모델의 가장 큰 차이점은, ML 모델의 동작이 **코드(Code)**뿐만 아니라

모델(Model) 자체와 학습에 사용된 **데이터(Data)**에 의해서도 결정된다는 점이다.65 따라서 MLOps 파이프라인은 이 세 가지 요소의 변경을 모두 추적하고 관리해야 하는 복잡성을 가진다.

MLOps 파이프라인은 일반적으로 다음과 같은 단계를 포함하며, 이 전체 과정이 CI/CD를 통해 자동화된다.

  1. 데이터 파이프라인: 새로운 데이터 수집, 정제, 레이블링, 그리고 유효성 검사.
  2. 모델 학습 파이프라인: 준비된 데이터로 모델을 학습하고, 하이퍼파라미터 튜닝을 통해 최적의 모델을 생성.
  3. 모델 배포 파이프라인 (CI/CD for Models): 학습된 모델을 패키징하고, 성능 평가 및 비즈니스 규칙 검증을 거쳐 서빙 환경에 배포.
  4. 모니터링 및 재학습: 배포된 모델의 예측 성능을 실시간으로 모니터링하다가, 성능 저하(Model Drift 또는 Data Drift)가 감지되면 자동으로 재학습 파이프라인을 트리거하여 모델을 업데이트.

AIOps와 MLOps의 등장은 CI/CD가 기존의 ’결정론적(deterministic) 자동화’에서 ’확률적(probabilistic)이고 적응적인(adaptive) 자동화’로 진화하고 있음을 시사한다. 전통적인 CI/CD 파이프라인은 “만약 테스트가 통과하면, 배포하라“와 같이 사전에 정의된 명확한 규칙에 따라 동작하는 결정론적 시스템이었다.

그러나 AIOps는 여기에 ’확률’과 ’학습’의 개념을 도입한다. 예를 들어, “과거 데이터와 비교했을 때 현재 오류율이 95% 신뢰 수준에서 비정상적이므로, 배포를 중단하고 롤백하라“와 같이 데이터에 기반한 확률적 의사결정을 내린다.61 MLOps는 한 걸음 더 나아가, 시스템이 외부 환경 변화(새로운 데이터 패턴)에 스스로 ’적응’하는 모습을 보여준다. 모델 성능이 저하되면 시스템이 이를 인지하고 스스로를 개선(재학습)하는 것이다.

이러한 변화는 CI/CD가 단순히 정해진 작업을 반복 수행하는 자동화 도구를 넘어, 운영 데이터를 통해 학습하고, 미래를 예측하며, 변화하는 환경에 능동적으로 적응하는 지능형 시스템으로 발전하고 있음을 의미한다. 이는 미래의 데브옵스 엔지니어에게 전통적인 스크립팅 능력을 넘어 데이터 분석 및 머신러닝 모델에 대한 이해를 요구하는 중요한 변화를 예고하고 있다.

5.3 서버리스(Serverless) CI/CD

서버리스 컴퓨팅(Serverless Computing)의 등장은 애플리케이션 아키텍처뿐만 아니라, 이를 구축하고 배포하는 CI/CD 파이프라인에도 근본적인 변화를 가져왔다. 서버리스는 개발자가 서버, 가상 머신, 컨테이너와 같은 기본 인프라를 직접 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있게 해주는 클라우드 컴퓨팅 모델이다.66 모든 것은 이벤트에 의해 촉발(event-driven)되며, 사용한 만큼만 비용을 지불하는(pay-per-use) 구조를 가진다.68

이러한 서버리스 아키텍처는 CI/CD 프로세스를 다음과 같이 변화시킨다.

  • 파이프라인의 극적인 단순화: 전통적인 CI/CD에서는 빌드 서버(Jenkins 에이전트 등)나 배포 대상 서버를 설치하고, 패치하고, 확장하는 등의 관리 오버헤드가 상당했다. 서버리스 CI/CD에서는 이러한 인프라 관리 부담이 클라우드 제공업체(예: AWS, Google Cloud)로 완전히 이전된다. 개발자는 AWS CodePipeline, Google Cloud Build와 같은 완전 관리형(fully managed) CI/CD 서비스를 사용하여 몇 번의 클릭이나 간단한 설정 파일만으로 파이프라인을 구성할 수 있다.66
  • 비용 효율성 극대화: 서버리스 CI/CD 파이프라인은 빌드나 배포 작업이 실행되는 동안에만 컴퓨팅 자원을 사용하고 비용을 지불한다. 빌드가 없는 시간에는 비용이 거의 발생하지 않는다. 이는 특히 빌드가 간헐적으로 발생하는 프로젝트나 개인 프로젝트에서, 항상 대기 상태로 리소스를 점유하는 전용 빌드 서버를 운영하는 것에 비해 비용을 크게 절감할 수 있게 해준다.66
  • 탄력적인 자동 확장: 코드 커밋이 몰려 동시에 여러 빌드 작업이 발생하더라도, 클라우드 제공업체가 배후에서 필요한 컴퓨팅 리소스를 자동으로 확장(scale-out)하여 처리한다. 이로 인해 빌드 병목 현상 없이 안정적인 파이프라인 성능을 유지할 수 있다.66
  • 세분화되고 빠른 배포 (Granular Deployment): 서버리스 애플리케이션은 보통 작고 독립적인 기능 단위인 ’함수(Function)’들의 집합으로 구성된다. 따라서 애플리케이션의 일부 기능만 수정되었을 경우, 전체 애플리케이션을 다시 빌드하고 배포할 필요 없이 변경된 특정 함수 하나만 독립적으로 신속하게 배포할 수 있다. 이는 배포 단위를 매우 작게 유지하여 리스크를 줄이고, 개발 및 배포 속도를 높이는 데 기여한다.69

AWS 환경에서의 서버리스 CI/CD 파이프라인 구현 예시는 다음과 같은 흐름을 가진다.

  1. 소스 (Source): 개발자가 AWS CodeCommit이나 GitHub 저장소에 코드를 푸시한다.
  2. 오케스트레이션 (Orchestration): AWS CodePipeline이 코드 변경을 감지하고 파이프라인을 시작한다.70
  3. 빌드 및 배포 (Build & Deploy): CodePipeline은 AWS CodeBuild를 트리거한다. CodeBuild는 프로젝트 루트의 buildspec.yml 파일에 정의된 명령어를 실행한다. 이 명령어는 보통 Serverless Framework의 sls deploy나 AWS SAM(Serverless Application Model)의 sam deploy와 같은 커맨드라인 도구를 호출한다. 이 도구들은 Lambda 함수 코드를 패키징하고, 필요한 클라우드 리소스(API Gateway, DynamoDB 등)를 AWS CloudFormation을 통해 프로비저닝하며, 최종적으로 Lambda 함수를 배포하는 모든 작업을 자동화한다.70

물론 서버리스 CI/CD에도 고려해야 할 점들이 있다. 함수가 오랜 시간 호출되지 않다가 처음 호출될 때 발생하는 지연 시간인 ‘콜드 스타트(Cold Start)’ 문제, 로컬 환경에서 클라우드와 동일한 환경을 재현하기 어려운 테스트의 복잡성, 그리고 특정 클라우드 제공업체의 서비스에 대한 의존성이 높아지는 ‘벤더 종속성(vendor lock-in)’ 등이 그것이다.72

서버리스 CI/CD의 등장은 개발자와 인프라팀의 역할 경계를 더욱 모호하게 만들고 있다. 전통적인 모델에서는 인프라팀이 서버를, 데브옵스팀이 파이프라인을, 개발팀이 코드를 담당했다. 그러나 서버리스 환경에서는 개발자가 작성하는 코드(예: AWS SAM 템플릿, serverless.yml) 안에 애플리케이션 로직뿐만 아니라 필요한 인프라 구성(어떤 Lambda 함수를, 어떤 API Gateway 엔드포인트와, 어떤 DynamoDB 테이블과 연결할 것인지 등)이 모두 포함된다.74

서버리스 CI/CD 파이프라인은 이 템플릿을 읽어 인프라 프로비저닝과 코드 배포를 한 번에 처리한다.70 이는 개발자가 더 이상 순수한 코드만 작성하는 것을 넘어, 자신의 코드가 실행될 인프라를 직접 설계하고, 파이프라인을 통해 배포하며, 운영 중인 서비스의 로그와 메트릭을 모니터링하는 것까지 책임지는 ‘풀-라이프사이클(Full-Lifecycle)’ 개발자로의 역할을 요구함을 의미한다. 인프라가 코드로 추상화되면서, 그 관리 책임의 상당 부분이 개발자에게로 이동하고 있는 것이다.

5.4 플랫폼 엔지니어링과 내부 개발자 플랫폼(IDP)

데브옵스와 클라우드 네이티브 기술이 확산되면서 개발팀의 책임과 역할은 크게 확장되었다. 개발자들은 이제 코드 작성뿐만 아니라 CI/CD 파이프라인 구성, 쿠버네티스 배포, 클라우드 리소스 관리, 모니터링 설정 등 과거 운영팀의 영역이었던 수많은 작업을 수행해야 했다. 이러한 상황은 개발자의 인지 부하(cognitive load)를 급격히 증가시켜, 정작 중요한 비즈니스 로직 개발에 집중하지 못하고 생산성이 저하되는 부작용을 낳았다. 플랫폼 엔지니어링(Platform Engineering)은 바로 이러한 문제를 해결하기 위해 등장한 새로운 접근법이다.

**플랫폼 엔지니어링(Platform Engineering)**은 조직 내의 개발팀들이 셀프서비스(self-service) 방식으로 애플리케이션을 효율적이고 안정적으로 개발하고 배포하는 데 필요한 모든 도구, 서비스, 지식, 워크플로우를 통합한 하나의 ’플랫폼’을 설계, 구축, 유지보수하는 전문 분야이다.75

이때 플랫폼 엔지니어링 팀이 만들어내는 결과물이 바로 **내부 개발자 플랫폼(Internal Developer Platform, IDP)**이다. IDP는 개발팀을 ’내부 고객’으로 간주하고, 그들의 개발 경험(Developer Experience, DevEx)을 최적화하기 위해 만들어진 ’내부용 제품’이다.76 IDP의 핵심 목표는 복잡하고 파편화된 기본 인프라와 도구들을 추상화하여, 개발자에게는 잘 포장되고 사용하기 쉬운 ‘황금 경로(golden path)’ 또는 ’포장된 길(paved road)’을 제공하는 것이다.

IDP는 CI/CD 파이프라인을 포함한 데브옵스 도구 체인을 핵심 구성 요소로 삼아, 이를 개발자들이 쉽게 소비할 수 있는 서비스 형태로 제공한다. IDP가 제공하는 핵심 가치는 다음과 같다.76

  • 개발자 자율성 및 생산성 향상: 개발자는 더 이상 쿠버네티스 YAML 파일을 직접 작성하거나 클라우드 IAM 정책을 깊이 이해할 필요가 없다. IDP가 제공하는 웹 포털이나 커맨드라인 도구를 통해 “새로운 마이크로서비스를 위한 개발 환경을 만들어줘” 또는 “이 서비스를 스테이징 환경에 배포해줘“와 같은 간단한 요청만으로 필요한 모든 인프라와 CI/CD 파이프라인이 자동으로 프로비저닝된다. 이를 통해 개발자는 인프라의 복잡성에서 해방되어 오직 비즈니스 가치 창출에만 집중할 수 있다.
  • 표준화 및 거버넌스 강화: 플랫폼 엔지니어링 팀은 조직의 보안 정책, 컴플라이언스 요구사항, 아키텍처 모범 사례 등을 IDP 플랫폼 자체에 내장한다. 개발자가 IDP를 통해 서비스를 생성하면, 이러한 표준들이 자동으로 적용된 상태로 만들어진다. 이는 조직 전체의 기술 스택 일관성을 유지하고, 보안 및 운영 안정성을 중앙에서 관리할 수 있게 해준다.
  • CI/CD의 서비스화: IDP는 프로젝트 유형(예: Java 백엔드, React 프론트엔드)에 맞는 표준 CI/CD 파이프라인 템플릿을 제공한다. 개발자는 이 템플릿을 선택하기만 하면, 자신의 프로젝트에 최적화된 빌드, 테스트, 보안 스캔, 배포 파이프라인이 자동으로 구성된다. CI/CD가 개별 팀의 설정 과제에서 플랫폼이 제공하는 신뢰할 수 있는 서비스로 전환되는 것이다.

IDP는 일반적으로 소프트웨어 템플릿(Software Templates), 모든 서비스와 리소스의 정보를 담은 구성 요소 카탈로그(Component Catalog), 그리고 이 모든 것을 접근할 수 있는 셀프서비스 포털(Self-service Portal) 등으로 구성된다.

플랫폼 엔지니어링의 등장은 데브옵스의 진화 과정에서 중요한 변곡점을 나타낸다. 초기 데브옵스는 ’개발자와 운영자의 벽을 허물고 모두가 모든 것을 함께 한다’는 이상을 추구했다. 그러나 클라우드 네이티브 기술 스택이 폭발적으로 복잡해지면서, 모든 개발팀이 모든 기술에 전문가가 되는 것은 비현실적이며 오히려 비효율을 낳는다는 것이 명확해졌다.

플랫폼 엔지니어링은 이러한 딜레마에 대한 해답으로, 데브옵스의 협업 철학을 유지하면서도 새로운 형태의 ’역할 분담’을 제안한다. 즉, ’플랫폼 팀’이라는 전문 조직이 복잡한 인프라와 공통 서비스를 책임지고, 이를 사용하기 쉬운 플랫폼(IDP)으로 만들어 ’애플리케이션 개발팀’에게 제공하는 것이다. 이는 과거의 개발팀과 운영팀 간의 사일로로 회귀하는 것이 아니다. 플랫폼 팀은 개발팀을 내부 고객으로 섬기며 그들의 생산성 향상을 최우선 목표로 삼고, 개발팀은 잘 만들어진 플랫폼 위에서 높은 자율성을 누리며 비즈니스 로직 개발에 매진한다. 결국 플랫폼 엔지니어링은 ’모두가 제너럴리스트가 되어야 한다’는 데브옵스의 초기 이상과 ’전문화를 통한 효율성 추구’라는 현실 사이에서 균형을 찾는, 보다 성숙하고 확장 가능한 데브옵스 모델로 볼 수 있다.

6. 결론: 지속 가능한 혁신을 위한 동력, CI/CD

본 안내서를 통해 살펴본 바와 같이, CI/CD는 현대 소프트웨어 개발의 패러다임을 근본적으로 변화시킨 핵심적인 동력이다. 이는 단순히 코드를 자동으로 빌드하고 배포하는 기술적 자동화의 차원을 넘어, 개발 프로세스에 내재된 리스크를 조기에 관리하고, 아이디어 창출부터 가치 전달까지의 피드백 루프를 극적으로 가속화하며, 팀의 협업 방식을 혁신하는 문화적, 철학적 실천이다.1

전통적인 개발 방식의 ’통합 지옥’에서 출발하여, 지속적 통합(CI)은 개발자들에게 심리적 안정감을 제공하고 코드 품질을 꾸준히 유지하는 기반이 되었다. 지속적 제공(CD)과 지속적 배포(CD)는 기술적 준비 상태와 비즈니스적 결정 사이의 간극을 메우거나, 혹은 그 간극마저 없애며 가치 전달 속도를 극대화하는 전략적 선택지를 제공했다. 이러한 과정은 데브옵스 문화와 상호작용하며, 기술과 문화가 함께 발전하는 선순환 구조를 형성했다.

CI/CD 파이프라인은 Git, Jenkins, Docker, Kubernetes 등 다양한 도구들의 유기적인 결합체로서, ‘코드로서의 파이프라인(PaC)’ 원칙을 통해 그 자체로 관리 가능하고 재사용 가능한 조직의 핵심 자산으로 자리 잡았다. 더 나아가 DevSecOps는 보안을 개발 프로세스의 초기 단계부터 통합하는 ‘Shift-Left’ 접근법을 통해 속도와 안정성을 동시에 추구하는 길을 열었으며, 블루/그린, 카나리 배포와 같은 고도화된 전략은 배포 행위를 ’이벤트’에서 ’과학적 검증 프로세스’로 진화시켰다.

성공적인 CI/CD 도입과 운영을 위해서는 다음과 같은 제언을 고려해야 한다.

  • 기술적 제언:
  • 점진적 접근: 처음부터 모든 것을 자동화한 완벽한 파이프라인을 구축하려 하지 말아야 한다. 현재 개발 프로세스에서 가장 고통스러운 지점(pain point), 예를 들어 수동 테스트나 배포 과정부터 작게 시작하여 점진적으로 자동화 범위를 확장하는 것이 현실적이고 성공 확률이 높다.17
  • 모범 사례의 꾸준한 적용: ‘빠른 피드백 루프 구축’, ‘파이프라인의 코드화’, ’파이프라인 보안 내재화’와 같은 핵심 모범 사례들을 일회성 프로젝트가 아닌, 지속적인 개선 활동으로 삼고 조직의 문화로 정착시켜야 한다.14
  • 조직적/문화적 제언:
  • 전사적 공감대 형성: CI/CD는 특정 팀만의 과제가 아니다. 개발, QA, 보안, 운영, 그리고 비즈니스 부서까지 모든 이해관계자가 CI/CD의 가치를 이해하고, 이를 지원하기 위한 조직 구조와 프로세스 변화에 동의해야 한다. 특히 경영진의 강력한 지원은 필수적이다.
  • 학습하는 문화 조성: 파이프라인은 필연적으로 실패를 경험한다. 이때 실패를 비난의 대상이 아닌, 프로세스를 개선할 수 있는 학습의 기회로 삼는 문화가 정착되어야 한다.14 모든 관련자가 파이프라인의 성공과 실패에 대한 공동의 책임(shared ownership)을 가질 때, 진정한 협업이 이루어질 수 있다.

미래를 내다볼 때, CI/CD는 더욱 지능적이고, 추상화되며, 개발자 친화적인 방향으로 진화할 것이 분명하다. GitOps는 선언적 관리를 통해 시스템의 신뢰성을 한 차원 높이고 있으며, AIOps와 MLOps는 데이터 기반의 예측과 적응형 자동화를 파이프라인에 불어넣고 있다. 서버리스 아키텍처는 인프라 관리의 부담을 없애고, 플랫폼 엔지니어링은 복잡한 기술 스택을 개발자가 쉽게 사용할 수 있는 서비스로 제공하며 CI/CD의 경험을 혁신하고 있다.

결론적으로, CI/CD는 더 이상 선택이 아닌 필수다. 미래의 소프트웨어 개발 환경에서 CI/CD는 마치 공기나 전기처럼 보이지는 않지만 없어서는 안 될 필수적인 인프라로 기능할 것이다. 이는 기술 조직의 생산성을 넘어, 기업 전체가 불확실한 시장 환경 속에서 지속적으로 혁신하고 생존할 수 있는 능력, 즉 조직의 회복탄력성(resilience)과 민첩성(agility)을 결정하는 가장 중요한 동력이 될 것이다.

7. 참고 자료

  1. CI/CD란? - ServiceNow, https://www.servicenow.com/kr/products/devops/what-is-cicd.html
  2. CI/CD란 무엇인가? 완벽 가이드 | CircleCI, https://circleci.com/ko/ci-cd/
  3. [Deploy] CI/CD - velog, https://velog.io/@hihijin/Deploy-CICD
  4. [CI/CD 지속적통합/지속적배포], Devops 의 핵심 구성요소 - IT 프로다, https://itproda.tistory.com/89
  5. CI/CD(Continuous Integration / Continuous Deployment) - 풍뎅아 공부하자. - 티스토리, https://sungks.tistory.com/162
  6. [CI/CD] CI/CD란? - 지속적 통합 / 지속적 제공 기본개념 - Koras02코딩웹, https://koras02.tistory.com/187
  7. 컨테이너 환경의 CI/CD 전략 - 오픈소스컨설팅 테크블로그, https://tech.osci.kr/cicd-architecture/
  8. CI/CD 파이프라인이란? - Red Hat, https://www.redhat.com/ko/topics/devops/what-cicd-pipeline
  9. CI/CD 기본 개념 - Steadily - 티스토리, https://kkh1902.tistory.com/190
  10. Continuous Integration - Martin Fowler, https://martinfowler.com/articles/continuousIntegration.html
  11. Understanding Jenkins CI/CD Pipeline And Its Stages - GeeksforGeeks, https://www.geeksforgeeks.org/devops/understanding-jenkins-ci-cd-pipeline-and-its-stages/
  12. CI / CD의 기초 및 개념 정리_인스피언, https://inspien01.tistory.com/entry/CI-CD%EC%9D%98-%EA%B8%B0%EC%B4%88-%EB%B0%8F-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC%EC%9D%B8%EC%8A%A4%ED%94%BC%EC%96%B8
  13. AWS 권장 가이드 - CI/CD 리투스 테스트, https://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/strategy-cicd-litmus/strategy-cicd-litmus.pdf
  14. Continuous integration best practices - GitLab, https://about.gitlab.com/topics/ci-cd/continuous-integration-best-practices/
  15. CI/CD 파이프라인 구축 방법 (단계별 가이드) - Apidog, https://apidog.com/kr/blog/how-to-build-ci-cd-3/
  16. CI/CD 파이프라인이란? - ServiceNow, https://www.servicenow.com/kr/products/devops/what-is-cicd-pipeline.html
  17. 혁신적인 소프트웨어 개발의 핵심: CI/CD 파이프라인 마스터하기 - 개발자 박진 블로그, https://jinn-blog.tistory.com/181
  18. What is CI/CD? - Red Hat, https://www.redhat.com/en/topics/devops/what-is-ci-cd
  19. 지금 알아야 할 CI/CD 트렌드 5가지 - 인포그랩, https://insight.infograb.net/blog/2024/07/31/cicd-trends/
  20. 5 Common mistakes to avoid when implementing CI/CD in your Testing process, https://www.frugaltesting.com/blog/5-common-mistakes-to-avoid-when-implementing-ci-cd-in-your-testing-process
  21. CI/CD Pipelines | InfoGrab, DevOps 전문 기술 기업 | 인포그랩 | GitLab기반 DevSecOps 구축,컨설팅,교육,기술지원 서비스 제공, https://insight.infograb.net/docs/user/ci_cd_pipelines
  22. CI/CD Process: Flow, Stages, and Critical Best Practices - Codefresh, https://codefresh.io/learn/ci-cd-pipelines/ci-cd-process-flow-stages-and-critical-best-practices/
  23. What Is the CI/CD Pipeline? - Palo Alto Networks, https://www.paloaltonetworks.com/cyberpedia/what-is-the-ci-cd-pipeline-and-ci-cd-security
  24. CI/CD: 지속적 통합과 배포의 핵심 개념과 차이점 이해하기 - Red Hat, https://www.redhat.com/ko/topics/devops/what-is-ci-cd
  25. Creating your first Pipeline - Jenkins, https://www.jenkins.io/doc/pipeline/tour/hello-world/
  26. Pipeline as Code - Jenkins, https://www.jenkins.io/doc/book/pipeline/pipeline-as-code/
  27. Get started with GitLab CI/CD, https://docs.gitlab.com/ci/
  28. Understanding GitHub Actions, https://docs.github.com/articles/getting-started-with-github-actions
  29. Build Your CI & CD Pipeline with Jenkins | by Sandeep Kumar | Medium, https://siddhivinayak-sk.medium.com/build-your-ci-cd-pipeline-with-jenkins-2dc082162f86
  30. DevOps toolchain - Cloud Adoption Framework - Microsoft Learn, https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/ready/considerations/devops-toolchain
  31. DevOps Tools for Each Phase of the DevOps Lifecycle | Atlassian, https://www.atlassian.com/devops/devops-tools
  32. 20+ Best CI/CD Tools for DevOps in 2025 - Spacelift, https://spacelift.io/blog/ci-cd-tools
  33. Top 10 Jenkins Plugins for DevOps - Opsera, https://www.opsera.io/blog/ace-your-devops-game-with-this-ultimate-list-of-plugins-in-jenkins
  34. How to build a CI/CD pipeline with GitHub Actions in four simple steps, https://github.blog/enterprise-software/ci-cd/build-ci-cd-pipeline-github-actions-four-steps/
  35. Migrating from Jenkins to GitHub Actions, https://docs.github.com/actions/learn-github-actions/migrating-from-jenkins-to-github-actions
  36. 초격차 패키지 : 한 번에 끝내는 CI/CD의 모든 것: Docker부터 GitOps까지 | 패스트캠퍼스, https://fastcampus.co.kr/dev_online_cicd
  37. Challenges and Solutions for Implementing CI/CD Pipelines in Linux-Based Development Frameworks - Journal of Scientific and Engineering Research, https://jsaer.com/download/vol-6-iss-6-2019/JSAER2019-6-6-229-232.pdf
  38. DevOps Feedback Loops: 7 Optimization Tips - Coherence, https://www.withcoherence.com/articles/devops-feedback-loops-7-optimization-tips
  39. Trunk-Based Development Vs Git Flow: A Comparison - Assembla, https://get.assembla.com/blog/trunk-based-development-vs-git-flow/
  40. Trunk-based development vs Gitflow: Which is right for your team? - Graphite, https://graphite.dev/guides/trunk-vs-gitflow
  41. Trunk-based Development | Atlassian, https://www.atlassian.com/continuous-delivery/continuous-integration/trunk-based-development
  42. 카나리 배포 파헤치기, https://facerain.github.io/canary-deployment/canary-deployment/
  43. 배포 전략, https://www.msaschool.io/operation/deployment/deployment-three/
  44. 배포 전략에 대해서 - MarrRang Dev Blog, https://marrrang.tistory.com/98
  45. DevOps 외 Ops의 종류 - MLOps, AIOps, SecOps, DevSecOps, GitOps, https://daddyrang.tistory.com/136
  46. CI/CD Security: What is It, Risks & 20 Best Practices - Spacelift, https://spacelift.io/blog/ci-cd-security
  47. OWASP DevSecOps Guideline - v-0.2, https://owasp.org/www-project-devsecops-guideline/latest/
  48. OWASP DevSecOps Guideline, https://owasp.org/www-project-devsecops-guideline/
  49. DevSecOps Pipeline Best Practices For 2025 - Wiz, https://www.wiz.io/academy/devsecops-pipeline-best-practices
  50. Implementing a secure CI/CD pipeline : r/devsecops - Reddit, https://www.reddit.com/r/devsecops/comments/1lloj76/implementing_a_secure_cicd_pipeline/
  51. Challenges and Solutions for Implementing CI/CD Pipelines in Linux-Based Development Frameworks - ResearchGate, https://www.researchgate.net/publication/386140349_Challenges_and_Solutions_for_Implementing_CICD_Pipelines_in_Linux-Based_Development_Frameworks
  52. Feedback loops: the key to improving mean time to recovery | CircleCI, https://circleci.com/blog/feedback-loops-the-key-to-improving-mean-time-to-recovery/
  53. How to set up your CI/CD pipeline for faster feedback - Adrian OPREA, https://oprea.rocks/blog/optimize-your-ci-cd-pipeline-for-fast-feedback.html
  54. Implementing feedback loops - DEV Community, https://dev.to/574n13y/implementing-feedback-loops-4l0o
  55. How to Use Fast Feedback Loops for Agile Development - GitKraken, https://www.gitkraken.com/blog/feedback-loops-agile-development
  56. CI/CD와 파이프라인 최적화에 대해, https://dev.classmethod.jp/articles/about-ci-cd-and-pipeline-optimization-kr/
  57. 4 Common Problems With Continuous Integration - Coherent Solutions, https://www.coherentsolutions.com/insights/continuous-integration-problems
  58. 15 CI/CD Challenges and its Solutions | BrowserStack, https://www.browserstack.com/guide/ci-cd-challenges-and-solutions
  59. GitOps가 뭐임? : r/devops - Reddit, https://www.reddit.com/r/devops/comments/k1chb6/whats_gitops/?tl=ko
  60. 데브옵스의 확장 모델 – 깃옵스(GitOps) 이해하기 | 인사이트리포트 | 삼성SDS - Samsung SDS, https://www.samsungsds.com/kr/insights/gitops.html
  61. What Is AIOps (Artificial Intelligence for IT Operations)? - Datadog, https://www.datadoghq.com/knowledge-center/aiops/
  62. What is AIOps and What WIll Be Its Future? | Logz.io, https://logz.io/blog/what-is-aiops-future/
  63. What is AIOps in a Cloud-Native World: SRE and DevOps Use Cases - Kubiya, https://www.kubiya.ai/blog/what-is-aiops-cloud-native-devops
  64. The six strategic uses cases for AIOps - IBM, https://www.ibm.com/think/topics/aiops-use-cases
  65. continuous delivery - Martin Fowler, https://martinfowler.com/tags/continuous%20delivery.html
  66. Google Serverless CI/CD - happtiq, https://www.happtiq.com/blog/serverless-ci-cd
  67. The Benefits of Serverless Computing Architecture | Akamai, https://www.akamai.com/blog/cloud/the-benefits-of-serverless-computing-architecture
  68. CI/CD for Serverless Applications - Harness, https://www.harness.io/blog/cicd-for-serverless
  69. How does serverless architecture support CI/CD pipelines? - Milvus, https://milvus.io/ai-quick-reference/how-does-serverless-architecture-support-cicd-pipelines
  70. AWS CI/CD Pipeline to Deploy a Serverless Framework project, https://www.serverlessguru.com/blog/aws-ci-cd-pipeline-to-deploy-a-serverless-framework-project
  71. Generate a starter CI/CD pipeline with AWS SAM - AWS Serverless Application Model, https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-generating-example-ci-cd.html
  72. CI/CD requirements for serverless applications - CircleCI, https://circleci.com/blog/ci-cd-requirements-for-serverless/
  73. Staying agile: Incorporating serverless into your CI/CD pipeline - Okoone, https://www.okoone.com/spark/technology-innovation/staying-agile-incorporating-serverless-into-your-ci-cd-pipeline/
  74. Using CI/CD systems and pipelines to deploy with AWS SAM, https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/deploying-cicd-overview.html
  75. www.atlassian.com, https://www.atlassian.com/developer-experience/internal-developer-platform#:~:text=Platform%20engineering,deliver%20software%20autonomously%20and%20faster.
  76. Internal Developer Platform [Benefits + Best Practices] | Atlassian, https://www.atlassian.com/developer-experience/internal-developer-platform#:~:text=Platform%20engineering,deliver%20software%20autonomously%20and%20faster